package com.atguigu.lease.web.admin.controller.apartment;


import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.PaymentType;
import com.atguigu.lease.web.admin.service.PaymentTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@Tag(name = "支付方式管理")
@RequestMapping("/admin/payment")
@RestController
public class PaymentTypeController {

    @Autowired
    private PaymentTypeService paymentTypeService;

    /**
     * 查询全部支付方式列表
     * 实现思路
     *      单表操作
     *      查询单表的所有书库,没有分页
     * 实现过程
     *      mybatis-plus的service扩展方法查询全部的支付方式集合
     *      service.list()
     *      list --> result.ok(list)
     * 实现问题:
     *      1.多了三个字段 createTime updateTime isDeleted
     *          返回的JSON拥有哪些数据,有我们的实体类决定
     *          User (id,name,age) -> 默认的行为(jackson) -> {id,name,age}
     *          springmvc接收前端和响应前端的json数据都是由 handlerAdapter使用jackson工具完成转化!
     *          我们的目标 ,让实体类不是所有的都生效json数据 User(id,name,age) -> 修改的行为(jackson) ->{Id，name}
     *          jackson:@JsonIgnore -> 加在属性上,属性就不会被转化为json key
     *      2.逻辑删除没有真正生效 [BaseEntity -> isDeleted -> @TableLogic]
     *      (表中添加一个数字字段 0 表示未删除 1 已删除 || 使用注解@TableLogic获取全局配置逻辑删除生效!)
     */
    @Operation(summary = "查询全部支付方式列表")
    @GetMapping("list")
    public Result<List<PaymentType>> listPaymentType() {
        List<PaymentType> list = paymentTypeService.list();
        return Result.ok(list);
    }


    /**
     *实现思路:
     *      单表的数据保存和更新
     *      有id更新
     *      没有id保存
     *      mybatis-plus /service /saveOrUpdate
     *      返回成功即可
     * 实现步骤
     *      1.导入PaymentTypeService对象
     *      2.调用saveOrUpdate方法
     *      3.判断成功还是失败,返回对应的result
     * 实现问题:
     *      1.逻辑删除字段没有默认值 0,导致修改的时候不修改,进行添加了
     *          1.1 BaseEntity isDeleted = 0 不推荐
     *          1.2 数据库可以设置默认值
     *          alter table payment_type modify is_deleted int default 0;
     *      2.创建时间和修改时间没有赋值
     *          2.1手动解决 handle方法中进行判断! 保存 添加creaTime 更新 updateTime
     *          2.2使用mybatis-plus的service扩展方法进行赋值!
     *          @TableField(fill = FieldFill.INSERT)
     *          @TableField(fill = FieldFill.UPDATE)
     *          2.2 有人(框架和技术) 在存储数据的时候 帮我们自动填充时间
     *          springboot springmvc spring jackson kenfii4j lombok
     *          mybatis mybatis-plus
     *          步骤1: 实体类的属性添加@TableField(fill = FieldFill.INSERT | UPDATE)
     *          步骤2: 定义数据设置的组件(common admin和app都要)
     *                  com.atguigu.lease.common.mybatisplus.MybatisMetaObjectHandler implements MetaObjectHandler
     *
     *
     *
     */
    @Operation(summary = "保存或更新支付方式")
    @PostMapping("saveOrUpdate")
    public Result saveOrUpdatePaymentType(@RequestBody PaymentType paymentType) {
        boolean saveOrUpdate = paymentTypeService.saveOrUpdate(paymentType);
//        if (saveOrUpdate) {
//            return Result.ok();
//        }
        return saveOrUpdate ? Result.ok() : Result.fail();
    }

    @Operation(summary = "根据ID删除支付方式")
    @DeleteMapping("deleteById")
    public Result deletePaymentById(@RequestParam Long id) {
        paymentTypeService.removeById(id);
        return Result.ok();
    }

}















